/*
 * Format a long INT with commas.

    Contact info:
    bhepple@freeshell.org
    http://bhepple.freeshell.org

    Copyright (C) 1999-2008 Bob Hepple

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; see the file COPYING.  If not, write to
    the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    Boston, MA 02111-1307, USA.

 */

#include <stdio.h>
#include <string.h>
void add_commas(str, num)
        char    *str;
        long    num;
{
        char    *s, *d;
        int     num_commas,
                count;

        if (!str)
                return;
        sprintf(str, "%ld", num);

        if (*str == '-')
                str++;
        num_commas = (strlen(str) - 1) / 3;

        if (num_commas) {
                s = str + strlen(str);
                d = s + num_commas;
                *d-- = *s--;    /* Terminating \0 */
		count = 0;
		while (s >= str) {
			if (num_commas && (count == 3)) {
                                count = 0;
                                num_commas--;
                                *d-- = ',';
                        }
			*d-- = *s--;
			count++;
                }
        }
}

#ifdef TEST
main()
{
        long    i;
        char    str[80];

        do {
                printf("Enter number (0 to end) ... ");
                scanf("%ld", &i);
		add_commas(str, i);
                printf("%ld -> %s\n", i, str);
        } while (i);
}
#endif /* TEST */

/* For emacs:
 * Local Variables:
 * tab-width: 8
 * End:
 */
